/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Model.Consulta;
import Model.Medico;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author RodrigoDantas
 */
public class ConsultaDao {
    
     private static final ConsultaDao INSTANCE = new ConsultaDao();
    private ArrayList<Consulta> listaConsulta = new ArrayList<Consulta>();
    BancoDeDados bd = null;
    private int idGen = 0;
    public ConsultaDao(){
       carregaLista();
    }
    
    public void carregaLista(){
        bd = new BancoDeDados();
        try {
            bd.conectar();
            bd.sql = "SELECT * FROM \"consulta\"";
            
            bd.comandoSql = bd.connection.prepareStatement(bd.sql);
            ResultSet rs  = bd.comandoSql.executeQuery();
            
            int    id_consulta;
            int    id_medico;
            int    id_paciente;
            Date   dataConsulta;
            
            Consulta consulta;
            
            while(rs.next()){
                
                id_consulta = rs.getInt(1);
                id_medico = rs.getInt(2);
                id_paciente = rs.getInt(3);
                dataConsulta = rs.getDate(4);
                
              
              consulta   = new Consulta(id_consulta, id_medico, id_paciente, dataConsulta);
              
              //listaConsulta.add(consulta);           
            }
          
            bd.desconectar();
        } catch (Exception ex) {
            Logger.getLogger(ConsultaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }     
    
    
     
    public void insereConsulta(int id_consulta, int id_medico, int id_paciente, Date dataConsulta){
        bd = new BancoDeDados();
        try {
            bd.conectar();
            bd.sql = "INSERT INTO \"consulta\" VALUES(?,?,?,?)";
            bd.comandoSql = bd.connection.prepareStatement(bd.sql);
            bd.comandoSql.setInt(1, id_consulta);
            bd.comandoSql.setInt(2, id_medico);
            bd.comandoSql.setInt(3, id_paciente);
            bd.comandoSql.setDate(4, dataConsulta);
            
            bd.comandoSql.executeUpdate();
            
            //listaMedico.add(new Medico(id_medico, numero, sexo, nome, cpf, telefone, rua, bairro, cidade, estado));
            idGen++;
        } catch (Exception ex) {
            Logger.getLogger(PacienteDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
     
     
    public static ConsultaDao getINSTANCE() {
        return INSTANCE;
    }
    
    public int getNextId(){
        return idGen+1;
    }

    public ArrayList<Consulta> getListaConsulta() {
        return listaConsulta;
    }

    public Consulta findById(int id) {
        for(Consulta consulta : listaConsulta)
            if(consulta.getId_consulta() == id)
                return consulta;
        return null;
    }
 
    public void atualizaConsulta(int id_consulta, int id_medico, int id_paciente, Date dataConsulta, int idVelho){
       
        bd = new BancoDeDados();
        try {
            bd.conectar();
            bd.sql = "UPDATE \"consulta\" SET  \"id_consulta\" = ?, \"id_medico\" = ?, \"id_paciente\" = ?, \"dataConsulta\" = ?. WHERE \"id_velho\" = ?";
            bd.comandoSql = bd.connection.prepareStatement(bd.sql);
            bd.comandoSql.setInt(1, id_consulta);
            bd.comandoSql.setInt(2, id_medico);
            bd.comandoSql.setInt(3, id_paciente);
            bd.comandoSql.setDate(4, dataConsulta);
            
            
            bd.comandoSql.executeUpdate();
            
            listaConsulta.remove(findById(idVelho));
            
            //Medico medico = new Medico(id_medico, numero, sexo, nome, cpf, telefone, rua, bairro, cidade, estado);
                            
            //listaMedico.add(medico);
            
        } catch (Exception ex) {
            Logger.getLogger(PacienteDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }

   
   
}
